--- title: dashboards keywords: fastai sidebar: home_sidebar summary: "Supplies dashboards to investigate datasets and training results. Dashboards are defined as classes, to show the dashboard use the .show() function on an dashboard instance." description: "Supplies dashboards to investigate datasets and training results. Dashboards are defined as classes, to show the dashboard use the .show() function on an dashboard instance." nb_path: "nbs/dashboards.ipynb" ---
{% raw %}
{% endraw %} {% raw %}
{% endraw %} {% raw %}
pn.extension()
{% endraw %}

Test data setup

{% raw %}
import icedata
{% endraw %} {% raw %}
test_data_dir = icedata.fridge.load_data()
test_class_map = icedata.fridge.class_map()
test_parser = icedata.fridge.parser(test_data_dir, test_class_map)
test_train_records, test_valid_records = test_parser.parse()
test_record_dataset = RecordDataset(test_valid_records, test_class_map)
test_record_dataset_no_class_map = RecordDataset(test_valid_records)
INFO     - Autofixing records | icevision.parsers.parser:parse:126

{% endraw %}

Dataset overview

{% raw %}

class RecordDatasetOverview[source]

RecordDatasetOverview(record_dataset, height=500, width=1500)

{% endraw %} {% raw %}
{% endraw %} {% raw %}
dso = RecordDatasetOverview(test_record_dataset, height=500)
dso.show()
{% endraw %} {% raw %}
dso = RecordDatasetOverview(test_record_dataset_no_class_map, height=700, width=500)
dso.show()
{% endraw %} {% raw %}

class MultiDatasetOverview[source]

MultiDatasetOverview(datasets, height=500, width=1500)

{% endraw %} {% raw %}
{% endraw %} {% raw %}
mdo = MultiDatasetOverview([test_record_dataset, test_record_dataset_no_class_map], width=800, height=500)
mdo.show()
{% endraw %} {% raw %}
mdo_empty = MultiDatasetOverview([])
assert mdo_empty.show() is None
{% endraw %}

Dataset filter

{% raw %}

class DatasetFilter[source]

DatasetFilter(record_dataset, export_variable:Optional[list]=None, height=500, width=500)

Creates a gallery with filter options to select subsets of the data. If the export_varialbe is set to a variable, that is a list a dict with the current selection (pd.Dataframe (key: data) and list of records (key: records)) will be append to the list.

{% endraw %} {% raw %}
{% endraw %} {% raw %}
dump_var = []
ds_filter = DatasetFilter(test_record_dataset, export_variable=dump_var, width=1000, height=500).show()
# trigger click event to test if record is added to dump_var
ds_filter[-1].clicks += 1
assert len(dump_var) == 1
assert len(dump_var[0]["records"]) == len(test_valid_records)
ds_filter
{% endraw %}

Dataset creator

{% raw %}

class DatasetFilterThatOnlyExportsStats[source]

DatasetFilterThatOnlyExportsStats(record_dataset, export_variable:Optional[list]=None, height=500, width=500) :: DatasetFilter

Creates a gallery with filter options to select subsets of the data. If the export_varialbe is set to a variable, that is a list a dict with the current selection (pd.Dataframe (key: data) and list of records (key: records)) will be append to the list.

{% endraw %} {% raw %}
{% endraw %} {% raw %}
dump_var = []
dstoes_filter = DatasetFilterThatOnlyExportsStats(test_record_dataset, export_variable=dump_var, height=400).show()
# trigger click event to test if record is added to dump_var
dstoes_filter[-1].clicks += 1
assert len(dump_var) == 1
assert isinstance(dump_var[0], pd.DataFrame)
dstoes_filter
{% endraw %} {% raw %}

class DatasetCreator[source]

DatasetCreator(record_dataset, class_map=None, height=500, width=1000)

{% endraw %} {% raw %}
{% endraw %} {% raw %}
dsc = DatasetCreator(test_record_dataset, test_class_map)
dsc.show()
[]
Traceback (most recent call last):
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/pyviz_comms/__init__.py", line 316, in _handle_msg
    self._on_msg(msg)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/panel/viewable.py", line 258, in _on_msg
    patch.apply_to_document(doc, comm.id)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/protocol/messages/patch_doc.py", line 100, in apply_to_document
    doc._with_self_as_curdoc(lambda: doc.apply_json_patch(self.content, setter))
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/document/document.py", line 1169, in _with_self_as_curdoc
    return f()
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/protocol/messages/patch_doc.py", line 100, in <lambda>
    doc._with_self_as_curdoc(lambda: doc.apply_json_patch(self.content, setter))
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/document/document.py", line 397, in apply_json_patch
    self._trigger_on_message(event_json["msg_type"], event_json["msg_data"])
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/document/document.py", line 686, in _trigger_on_message
    cb(msg_data)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/document/document.py", line 355, in apply_json_event
    model._trigger_event(event)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/util/callback_manager.py", line 85, in _trigger_event
    self._document._with_self_as_curdoc(invoke)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/document/document.py", line 1169, in _with_self_as_curdoc
    return f()
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/bokeh/util/callback_manager.py", line 74, in invoke
    callback(event)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/panel/widgets/button.py", line 103, in _server_click
    self._change_event(doc)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/panel/reactive.py", line 204, in _change_event
    self._process_events(events)
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/panel/reactive.py", line 187, in _process_events
    self.param.set_param(**self._process_property_change(events))
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/param/parameterized.py", line 1451, in set_param
    self_._batch_call_watchers()
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/param/parameterized.py", line 1578, in _batch_call_watchers
    watcher.fn(*events)
  File "<ipython-input-12-a62546c77a81>", line 100, in export
    self.export_variable.append(export_result)
  File "/home/frederik/Documents/GIT/icevision_dashboard/icevision_dashboard/utils.py", line 65, in append
    self._trigger_observer()
  File "/home/frederik/Documents/GIT/icevision_dashboard/icevision_dashboard/utils.py", line 35, in _trigger_observer
    observer(self._observable_list)
  File "<ipython-input-43-197875676a77>", line 40, in update_datasets_overview
    print(self._datasets_overview.show())
  File "<ipython-input-9-e6c4054624ff>", line 12, in show
    datasets_overview = create_datasets_overview(self._datasets, width=self.width, height=int(0.3*self.height))
  File "/home/frederik/Documents/GIT/icevision_dashboard/icevision_dashboard/utils.py", line 386, in create_datasets_overview
    dataset_stats = dataset.dataset_stats
  File "/home/frederik/anaconda3/envs/icevision_dashboard/lib/python3.8/site-packages/pandas/core/generic.py", line 5141, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'dataset_stats'
{% endraw %} {% raw %}
dsc._datasets.append(1)
{% endraw %} {% raw %}
create_datasets_overview([test_record_dataset])
{% endraw %}